/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proyecto.modelado;

import com.proyecto.datos.ConnDB;
import com.proyecto.datos.EntityHorarioLab;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;

/**
 *
 * @author mario
 */
public class DetalleHorarioLab {

    public ArrayList MostrarDetalleHorarioLab() {

        ArrayList arry = new ArrayList();
        String cadenaSQL = "select detalab.id_detalle_horario_lab,mate.nombre_materia,hora.horario,cate.nombre,grupo.grupo, "
                + "detalab.cupo "
                + "from DETALLE_HORARIO_LAB detalab, MATERIA mate, HORARIO hora, CATEDRATICO cate, GRUPO grupo "
                + "where detalab.MATERIA_id_materia=mate.id_materia and "
                + "detalab.HORARIO_id_horario = hora.id_horario and  "
                + "detalab.CATEDRATICO_id_catedratico=cate.id_catedratico and "
                + "detalab.GRUPO_id_grupo = grupo.id_grupo";
        EntityHorarioLab entHoraLab = new EntityHorarioLab();
        arry = entHoraLab.EjecutarConsulta(cadenaSQL);

        entHoraLab = null;

        return arry;

    }

    public ArrayList ObtenerGruposIntro() {
        ArrayList arry = new ArrayList();
        String cadenaSQL;

//        Tener en cuenta que se borro la instruccion para llamar el codigo 14 que es FIS1
//                para no repetir los numeros de grupo por cuestion de estetica

        cadenaSQL = "select detalab.id_detalle_horario_lab,mate.cod_asignatura,hora.horario,cate.nombre,cate.apellido,"
                + "grupo.grupo, detalab.cupo "
                + "from DETALLE_HORARIO_LAB detalab, MATERIA mate, HORARIO hora, CATEDRATICO cate, GRUPO grupo "
                + "where detalab.MATERIA_id_materia=mate.id_materia and "
                + "detalab.HORARIO_id_horario = hora.id_horario and  "
                + "detalab.CATEDRATICO_id_catedratico=cate.id_catedratico and "
                + "detalab.GRUPO_id_grupo = grupo.id_grupo "
                + "and (detalab.MATERIA_id_materia = 10)"
                + "order by detalab.id_detalle_horario_lab";
        EntityHorarioLab entHoraLab = new EntityHorarioLab();
        arry = entHoraLab.EjecutarConsulta(cadenaSQL);

        entHoraLab = null;


        return arry;
    }

    public ArrayList MostrarHorariosPlan10(int id_materia) {

        ArrayList arry = new ArrayList();

        String cadenaSQL = "select detalab.id_detalle_horario_lab, mate.cod_asignatura, hora.horario,cate.nombre,cate.apellido,grupo.grupo, detalab.cupo  "
                + "from HORARIO hora, DETALLE_HORARIO_LAB detalab, MATERIA mate, GRUPO grupo,CATEDRATICO cate "
                + "where detalab.HORARIO_id_horario = hora.id_horario "
                + "and detalab.MATERIA_id_materia = mate.id_materia  "
                + "and detalab.MATERIA_id_materia = " + id_materia + " "
                + "and detalab.GRUPO_id_grupo = grupo.id_grupo "
                + "and cate.id_catedratico = detalab.CATEDRATICO_id_catedratico "
                + "order by detalab.id_detalle_horario_lab;";

        EntityHorarioLab entDetaLab = new EntityHorarioLab();
        arry = entDetaLab.EjecutarConsulta(cadenaSQL);

        entDetaLab = null;


        return arry;

    }

    public ArrayList MostrarHorariosPlan04(int id_materia) {

        ArrayList arry = new ArrayList();

        String cadenaSQL = "select detalab.id_detalle_horario_lab, mate.cod_asignatura, hora.horario,cate.nombre,cate.apellido,grupo.grupo, detalab.cupo  "
                + "from HORARIO hora, DETALLE_HORARIO_LAB detalab, MATERIA mate, GRUPO grupo,CATEDRATICO cate "
                + "where detalab.HORARIO_id_horario = hora.id_horario "
                + "and detalab.MATERIA_id_materia = mate.id_materia  "
                + "and detalab.MATERIA_id_materia = " + id_materia + " "
                + "and detalab.GRUPO_id_grupo = grupo.id_grupo "
                + "and cate.id_catedratico = detalab.CATEDRATICO_id_catedratico "
                + "order by detalab.id_detalle_horario_lab;";

        EntityHorarioLab entDetaLab = new EntityHorarioLab();
        arry = entDetaLab.EjecutarConsulta(cadenaSQL);

        entDetaLab = null;


        return arry;

    }

    public ArrayList BuscarHorario(String dato) {

        ArrayList arry;
        String cadenaSQL = "select detalab.id_detalle_horario_lab, mate.nombre_materia, hora.horario,cate.nombre,grupo.grupo, detalab.cupo  "
                + "from HORARIO hora, DETALLE_HORARIO_LAB detalab, MATERIA mate, GRUPO grupo,CATEDRATICO cate "
                + "where detalab.HORARIO_id_horario = hora.id_horario "
                + "and detalab.MATERIA_id_materia = mate.id_materia  "
                + "and (detalab.MATERIA_id_materia = 5 or detalab.MATERIA_id_materia = 1) "
                + "and detalab.GRUPO_id_grupo = grupo.id_grupo "
                + "and cate.id_catedratico = detalab.CATEDRATICO_id_catedratico "
                + "and concat(mate.nombre_materia, hora.horario) like '%" + dato + "%' "
                + "order by hora.horario;";
        EntityHorarioLab entDetaLab = new EntityHorarioLab();
        arry = entDetaLab.EjecutarConsulta(cadenaSQL);
        entDetaLab = null;
        return arry;

    }

    public String InsertarGrupoLaboratorio(int id_materia1,int id_materia2,int id_horario, int id_catedratico, int id_grupo) {

        String msj = "Registrado con éxito";
        Connection cn;
        ConnDB db = new ConnDB();

        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());



            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL I_IAF0_FIS1_LABORATORIO(?,?,?,?,?)");
            //se cargan los parametros de entrada

            proc.setInt("_id_materia1", id_materia1);
            proc.setInt("_id_materia2", id_materia2);
            proc.setInt("_id_horario", id_horario);
            proc.setInt("_id_catedratico", id_catedratico);
            proc.setInt("_id_grupo", id_grupo);
            // Se ejecuta el procedimiento almacenado
            proc.execute();


        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "No se pudo resgitrar el grupo";
        }

        return msj;

    }

//    public String InsertarFCA1_FIS2_Laboratorio(int id_horario, int id_catedratico, int id_grupo) {
//
//        String msj = "Registrado con éxito";
//        Connection cn;
//        ConnDB db = new ConnDB();
//
//        try {
//            Class.forName(db.getDriver());
//            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());
//
//
//
//            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
//            CallableStatement proc = cn.prepareCall("CALL I_FCA1_FIS2_LABORATORIO(?,?,?)");
//            //se cargan los parametros de entrada
//
//            proc.setInt("_id_horario", id_horario);
//            proc.setInt("_id_catedratico", id_catedratico);
//            proc.setInt("_id_grupo", id_grupo);
//            // Se ejecuta el procedimiento almacenado
//            proc.execute();
//
//
//        } catch (Exception ex) {
//            System.out.println(ex.toString());
//            msj = "No se pudo resgitrar el grupo";
//        }
//
//        return msj;
//
//    }
//
//    public String InsertarFCA2_FIS3_Laboratorio(int id_horario, int id_catedratico, int id_grupo) {
//
//        String msj = "Registrado con éxito";
//        Connection cn;
//        ConnDB db = new ConnDB();
//
//        try {
//            Class.forName(db.getDriver());
//            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());
//
//
//
//            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
//            CallableStatement proc = cn.prepareCall("CALL I_FCA2_FIS3_LABORATORIO(?,?,?)");
//            //se cargan los parametros de entrada
//
//            proc.setInt("_id_horario", id_horario);
//            proc.setInt("_id_catedratico", id_catedratico);
//            proc.setInt("_id_grupo", id_grupo);
//            // Se ejecuta el procedimiento almacenado
//            proc.execute();
//
//
//        } catch (Exception ex) {
//            System.out.println(ex.toString());
//            msj = "No se pudo resgitrar el grupo";
//        }
//
//        return msj;
//
//    }
//
//    public String InsertarFCA3_FIS4_Laboratorio(int id_horario, int id_catedratico, int id_grupo) {
//
//        String msj = "Registrado con éxito";
//        Connection cn;
//        ConnDB db = new ConnDB();
//
//        try {
//            Class.forName(db.getDriver());
//            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());
//
//
//
//            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
//            CallableStatement proc = cn.prepareCall("CALL I_FCA3_FIS4_LABORATORIO(?,?,?)");
//            //se cargan los parametros de entrada
//
//            proc.setInt("_id_horario", id_horario);
//            proc.setInt("_id_catedratico", id_catedratico);
//            proc.setInt("_id_grupo", id_grupo);
//            // Se ejecuta el procedimiento almacenado
//            proc.execute();
//
//
//        } catch (Exception ex) {
//            System.out.println(ex.toString());
//            msj = "No se pudo resgitrar el grupo";
//        }
//
//        return msj;
//
//    }

    public ArrayList MostrarCatalogoGruposLaboratorio() {
        ArrayList arry = new ArrayList();
        EntityHorarioLab entHorLab = new EntityHorarioLab();
        String cadenaSQL = "select detalab.id_detalle_horario_lab, mate.cod_asignatura,hora.horario,cate.nombre,cate.apellido, "
                + "grupo.grupo,detalab.cupo "
                + "from (DETALLE_HORARIO_LAB detalab inner join MATERIA mate on detalab.MATERIA_id_materia=mate.id_materia) "
                + "inner join HORARIO hora on detalab.HORARIO_id_horario=hora.id_horario "
                + "inner join CATEDRATICO cate on detalab.CATEDRATICO_id_catedratico=cate.id_catedratico "
                + "inner join GRUPO grupo on detalab.GRUPO_id_grupo=grupo.id_grupo "
                + "order by detalab.id_detalle_horario_lab;";
        arry = entHorLab.EjecutarConsulta(cadenaSQL);
        entHorLab = null;

        return arry;
    }

    public ArrayList ObtenerGrupos_U1(int id_materia) {
        ArrayList arry = new ArrayList();
        String cadenaSQL;


        cadenaSQL = "select detalab.id_detalle_horario_lab,mate.cod_asignatura,hora.horario,cate.nombre,cate.apellido, "
                + "grupo.grupo, detalab.cupo "
                + "from DETALLE_HORARIO_LAB detalab inner join MATERIA mate on detalab.MATERIA_id_materia=mate.id_materia "
                + "inner join HORARIO hora on detalab.HORARIO_id_horario=hora.id_horario inner join "
                + "CATEDRATICO cate on detalab.CATEDRATICO_id_catedratico=cate.id_catedratico inner join "
                + "GRUPO grupo on detalab.GRUPO_id_grupo=grupo.id_grupo "
                + "where mate.id_materia="+id_materia+" "
                + "order by detalab.id_detalle_horario_lab;";
        
        EntityHorarioLab entHoraLab = new EntityHorarioLab();
        arry = entHoraLab.EjecutarConsulta(cadenaSQL);

        entHoraLab = null;


        return arry;
    }
    
    public String ModificarGrupoLab(int id_lab,int id_horario,int id_catedratico,int id_grupo){
        String cadenaSQL;
        String msj;
        cadenaSQL = "update DETALLE_HORARIO_LAB set HORARIO_id_horario="+id_horario+", "
                + "CATEDRATICO_id_catedratico="+id_catedratico+",GRUPO_id_grupo="+id_grupo+" "
                + "where id_detalle_horario_lab="+id_lab+";";
        EntityHorarioLab entHoraLab = new EntityHorarioLab();
        msj = entHoraLab.EjecutarComando(cadenaSQL);
        entHoraLab = null;
        return msj;
    }
    
    public String eliminarGrupoLab(int id_lab){
        String cadenaSQL;
        String msj;
        cadenaSQL = "delete from DETALLE_HORARIO_LAB "
                + "where id_detalle_horario_lab="+id_lab+";";
        EntityHorarioLab entHoraLab = new EntityHorarioLab();
        msj = entHoraLab.EjecutarComando(cadenaSQL);
        entHoraLab = null;
        return msj;
    }
}
